該文章同步發佈於:我的部落格
也歡迎關注我的 Facebook 以及 Instagram 接收軟體相關的資訊!
以及這個 30 天的 Docker 教學有出書喔!如果喜歡這個系列可以支持一下,天瓏書局
接續著昨天列出所有包含被停止的容器後,今天我們繼續來學習如何啟動停止的容器以及替容器命名!
對於被暫停的容器,我們並不需要使用 docker container run
的方式來啟動,而是可以直接對暫停的容器執行指令喚醒。
$ docker container start 6c438 # 你的 ID 不會和我相同
6c438
這時候回到瀏覽器輸入 http://localhost 又會看到服務重新被啟動了!
有些人可能會有疑問,為什麼這次啟動容器不需要加入 --detach
的參數就會自己在背景執行呢?
這是因為 Docker 的容器在第一次啟動的時候會記錄下設定檔,之後只要是重新啟動容器的狀況下,都會根據第一次啟動的設定執行。
這邊可以做個實驗來驗證這個說法,我們在額外啟動一個不背景執行的 nginx 容器:
$ docker container run --publish 8080:80 nginx
2022/08/30 16:15:57 [notice] 1#1: using the "epoll" event method
2022/08/30 16:15:57 [notice] 1#1: nginx/1.23.1
2022/08/30 16:15:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/08/30 16:15:57 [notice] 1#1: OS: Linux 5.10.104-linuxkit
2022/08/30 16:15:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/30 16:15:57 [notice] 1#1: start worker processes
2022/08/30 16:15:57 [notice] 1#1: start worker process 31
2022/08/30 16:15:57 [notice] 1#1: start worker process 32
2022/08/30 16:15:57 [notice] 1#1: start worker process 33
接著我們列出目前執行的容器,會看到兩個都是 nginx 的容器在執行:
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c438c6f... nginx "/do.." 2 min.. Up.... 0.0.0.0:80->80/tcp goofy
74ea9375... nginx "/do.." 5 sec.. Up.. 0.0.0.0:8080->80.. lucid
接著我們透過 inspect
這個指令來檢查這個容器的設定檔,這邊採用 --format
的參數是為了縮短篇幅,專注在檢查單一的設定。
$ docker container inspect --format '{{ .Config.AttachStdout }}' 6c4
false ( 背景執行 ) #不換行
$ docker container inspect --format '{{ .Config.AttachStdout }}' bf4
true ( 直接印出來 ) #不換行
可以看到兩個容器在對於終端機的畫面輸出設定不一樣,若是啟動了背景執行的功能,等於是不需要輸出終端機的畫面。
反之,若是沒有加入背景執行的參數,則默認為需要輸出終端機的畫面,也就變成一開始直接印出來的樣子。
在剛剛的範例中,我們都是使用 Docker 提供獨一無二的 ID 在對容器進行操作,但這在實務上顯然不太實際,畢竟每一次的 ID 都是不一樣的,很難精準的操控容器。
所以我們也可以透過基本的參數傳入替容器命名,這邊我們先刪除掉所有的容器:
$ docker container rm --force $(docker container ls -aq)
上面的指令會強行刪除所有容器,這是為了方便練習才使用的指令,平時不要用這個指令去刪除容器,除非你很清楚你在做什麼!
接著我們把容器命名為 nginx,方面我們之後管理:
$ docker container run --name nginx --publish 80:80 --detach nginx # 不換行
3e489a611df3a09a50dec629824f2d4...
列出容器來看看吧!
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e489a61... nginx "/do.." 2 min.. Up.... 0.0.0.0:80->80/tcp nginx
接著我們把剛剛學到的指令使用在這個容器上,就不需要再使用這個容器的 ID 了,而是他的名字。
$ docker container stop nginx
nginx
今天學習了如何啟動已停止的容器,以及為什麼重新啟動容器不需要加入原先的設定!
並且大家也學會怎麼幫容器命名了,之後就可以不需要對著一堆亂碼進行操作了!
明天會把剩餘的基礎容器相關指令給解說完,並且最後刪除容器,完整了一個容器的生命週期。
明天見!